/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package UT02_RevisarNotificaciones;

import Herramientas.Herramientas;
import Herramientas.Visualizacion;
import java.awt.Component;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;

/**
 *
 * @author Nahuel
 */
public class UT02_3_1_listaSalutaciones extends javax.swing.JFrame {

    /**
     * Creates new form UT02_3_1_listaSalutaciones
     */
    public class Salutacion {

        private String tipo;
        private String fecha;
        private String mensaje;
        private boolean seleccionado;

        public Salutacion(String tipo, String fecha, String mensaje, boolean seleccionado) {
            this.tipo = tipo;
            this.fecha = fecha;
            this.mensaje = mensaje;
            this.seleccionado = seleccionado;
        }

        public String getMensaje() {
            return mensaje;
        }

        public void setMensaje(String mensaje) {
            this.mensaje = mensaje;
        }

        public String getFecha() {
            return fecha;
        }

        public void setFecha(String fecha) {
            this.fecha = fecha;
        }

        public boolean isSeleccionado() {
            return seleccionado;
        }

        public void setSeleccionado(boolean seleccionado) {
            this.seleccionado = seleccionado;
        }

        public String getTipo() {
            return tipo;
        }

        public void setTipo(String tipo) {
            this.tipo = tipo;
        }
    }

    public class ModeloTabla extends AbstractTableModel {

        private List<Salutacion> lista = new ArrayList();
        private Class[] types = new Class[]{
            java.lang.String.class, java.lang.String.class, java.lang.String.class, JRadioButton.class
        };

        public void cargarLista(List<Salutacion> lista) {
            this.lista = lista;
            for (int i = 0; i < lista.size(); i++) {
                this.setValueAt(lista.get(i).getTipo(), i, 0);
                this.setValueAt(lista.get(i).getFecha(), i, 1);
                this.setValueAt(lista.get(i).getMensaje(), i, 2);
                this.setValueAt(lista.get(i).isSeleccionado(), i, 3);
            }
            this.fireTableDataChanged();
        }

//    public List<Object> getSeleccionados() {
//        List<Object> listaSeleccionados = new ArrayList<CiiuDTO>();
//        
//        for (CiiuDTO ciiuDTO : lista) {
//            if(ciiuDTO.isSeleccionada()) listaSeleccionados.add(ciiuDTO);
//        }
//        return listaSeleccionados;
//    }
        @Override
        public Class<?> getColumnClass(int columnIndex) {
            return this.types[columnIndex];
        }

        @Override
        public String getColumnName(int column) {
            switch (column) {
                case 0:
                    return "Tipo de Salutación";
                case 1:
                    return "Fecha";
                case 2:
                    return "Mensaje";
                case 3:
                    return "Ver";
                default:
                    throw new RuntimeException("columna no existe");
            }

        }

        @Override
        public int getRowCount() {
            return lista.size();
        }

        @Override
        public int getColumnCount() {
            return 4;
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            switch (columnIndex) {
                case 0:
                    return lista.get(rowIndex).getTipo();
                case 1:
                    return lista.get(rowIndex).getFecha();
                case 2:
                    return lista.get(rowIndex).getMensaje();
                case 3:
                    return new JRadioButton("", lista.get(rowIndex).isSeleccionado());
                default:
                    throw new RuntimeException("columna no existe");
            }
        }

        public void tableChanged(TableModelEvent e) {
            this.fireTableChanged(e);
            repaint();
        }
    }

    class RadioButtonEditor extends DefaultCellEditor implements ItemListener {

        private JRadioButton button;

        public RadioButtonEditor(JCheckBox checkBox) {
            super(checkBox);
        }

        @Override
        public Component getTableCellEditorComponent(JTable table, Object value,
                boolean isSelected, int row, int column) {
            if (value == null) {
                return null;
            }
            button = (JRadioButton) value;
            button.addItemListener(this);
            button.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
            return (Component) value;
        }

        @Override
        public Object getCellEditorValue() {
            button.removeItemListener(this);
            return button;
        }

        @Override
        public void itemStateChanged(ItemEvent e) {
            super.fireEditingStopped();
        }
    }

    class RadioButtonRenderer implements TableCellRenderer {

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            if (value == null) {
                return null;
            }
            return (Component) value;
        }
    }

    public UT02_3_1_listaSalutaciones() {
        Visualizacion.setVisual(this);
        initComponents();
        jMenu1.setText(Herramientas.getNombreParaPantalla(this) + jMenu1.getText());

        UIDefaults ui = UIManager.getLookAndFeel().getDefaults();
        UIManager.put("RadioButton.focus", ui.getColor("control"));

        ModeloTabla modelo = new ModeloTabla();
        List<Salutacion> lista = new ArrayList();
        lista.add(new Salutacion("Aprobación de Parcial", "15/07/2013", "Lo felicitamos por haber aprobado el parcial de Redes de la fecha 11-04-2013", false));
        lista.add(new Salutacion("Regularización de Materia", "21/07/2013", "Felicitaciones ha Regularizado Álgebra", false));
        lista.add(new Salutacion("Cumpleaños", "24/07/2013", "Lo saludamos con agrado para su Cumpleaños", false));
        lista.add(new Salutacion("Inicio Cuatrimestre", "01/08/2013", "Bienvenido al Inicio del Segundo Cuatrimestre 2013", true));
        modelo.cargarLista(lista);

        jTable1.setModel(modelo);

        ButtonGroup group1 = new ButtonGroup();
        group1.add((JRadioButton) modelo.getValueAt(0, 3));
        group1.add((JRadioButton) modelo.getValueAt(1, 3));
        group1.add((JRadioButton) modelo.getValueAt(2, 3));
        group1.add((JRadioButton) modelo.getValueAt(3, 3));

        jTable1.getColumn("Ver").setCellRenderer(
                new RadioButtonRenderer());
        jTable1.getColumn("Ver").setCellEditor(
                new RadioButtonEditor(new JCheckBox()));
        setVisible(true);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jButton1 = new javax.swing.JButton();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null},
                {null, null},
                {null, null},
                {null, null}
            },
            new String [] {
                "Tipo de Salutación", "Ver"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Object.class, java.lang.Boolean.class
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        });
        jScrollPane1.setViewportView(jTable1);

        jButton1.setText("Ver");

        jMenu1.setText("Salutaciones");
        jMenuBar1.add(jMenu1);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 96, Short.MAX_VALUE)
                .addGap(21, 21, 21))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(16, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButton1)
                        .addGap(41, 41, 41))
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(23, 23, 23))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /*
         * Set the Nimbus look and feel
         */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /*
         * If Nimbus (introduced in Java SE 6) is not available, stay with the
         * default look and feel. For details see
         * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(UT02_3_1_listaSalutaciones.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(UT02_3_1_listaSalutaciones.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(UT02_3_1_listaSalutaciones.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(UT02_3_1_listaSalutaciones.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /*
         * Create and display the form
         */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new UT02_3_1_listaSalutaciones().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    // End of variables declaration//GEN-END:variables
}
